﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace EntitiesLayer
{   
    
    public sealed class CorreoElectronico :IEntity
    {
        private static  Regex Formato = new Regex(@"^[^ ]+@[^ ]+\.[a-zA-z]{2,}$"); 
        
        private readonly int idUsuario;
        public  int IdUsuario {
            get { return idUsuario; }
        }

        private readonly int idCorreo;
        public int Id
        {
            get { return idCorreo; }
        }

        private readonly string correo;

        public string Correo
        {
            get { return correo; }
        }

        private readonly string tipo;

        public string Tipo
        {
            get { return tipo; }
        }


        public CorreoElectronico(int idUsuario, string correo, string tipo, int idCorreo=0) {

            if (!Formato.IsMatch(correo))
                throw new ArgumentException("EL formato del correo no es valido");
            
            this.idCorreo = idCorreo;
            this.correo = correo;
            this.tipo = tipo;
            this.idUsuario = idUsuario;

        
        }

        public CorreoElectronico(int idUsuario, string correo, int idCorreo = 0)
            :this(idUsuario, correo, "Personal", idCorreo=0) { }

        public CorreoElectronico cambiarIdUsuario(string idUsuario) {
            
            return new CorreoElectronico(IdUsuario, correo, Tipo, Id);
        }
        public CorreoElectronico cambiarCorreo(string correo) 
        {
            return new CorreoElectronico(IdUsuario, correo, Tipo, Id);
        }

        public CorreoElectronico cambiarTipo(string tipo)
        {
            return new CorreoElectronico(IdUsuario, Correo, tipo, Id);
        }


        public override string ToString()
        {
            return
                 Correo + "    " + Tipo;
        }
    
    }
}
